package it.polimi.traveldream.ejb;

import it.polimi.traveldream.ejb.management.UserDTO;

import java.io.Serializable;

import javax.persistence.*;

import org.apache.commons.codec.digest.DigestUtils;

import java.util.List;


/**
 * The persistent class for the Utente database table.
 * 
 */
@Entity
@NamedQueries({
	@NamedQuery(name="Utente.findAll", query="SELECT u FROM Utente u"),
	@NamedQuery(name="Utente.findMail", query="SELECT u FROM Utente u WHERE u.mail = ?1"),
	@NamedQuery(name="Utente.modPass", query="UPDATE Utente u SET u.password = ?1 WHERE u.mail = ?2"),
	@NamedQuery(name="Utente.listaMail",query="SELECT u.mail FROM Utente u"),
})

public class Utente implements Serializable {
	private static final long serialVersionUID = 1L;
	
	public static final String FIND_ALL = "Utente.findAll";
	public static final String MOD_PASS = "Utente.modPass";
	public static final String FIND_MAIL = "Utente.findMail";
	public static final String LISTAMAIL = "Utente.listaMail";

	@Id
	private String mail;

	private String cognome;

	private String nome;

	private String password;
	
	public Utente(UserDTO user){
        
        this.mail = user.getEmail();
        this.nome = user.getFirstName();
        this.cognome = user.getLastName();        
        this.password = DigestUtils.sha512Hex(user.getPassword());
    }
	
	@ElementCollection(targetClass = Gruppo.class)
    @CollectionTable(name = "GruppiUtente",
                    joinColumns = @JoinColumn(name = "Mail"))
    @Enumerated(EnumType.STRING)
    @Column(name="gruppo")
    private List<Gruppo> groups;


	//bi-directional many-to-one association to Partecipazione
	@OneToMany(mappedBy="utente")
	private List<PacchettiPrenotati> partecipaziones;


	public Utente() {
	}

	public String getCognome() {
		return this.cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public String getMail() {
		return this.mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setGroups(List<Gruppo> groups) {
        this.groups = groups;
    }

	public List<PacchettiPrenotati> getPartecipaziones() {
		return this.partecipaziones;
	}

	public void setPartecipaziones(List<PacchettiPrenotati> partecipaziones) {
		this.partecipaziones = partecipaziones;
	}

	


}